package br.com.iss.transporteCia.view;

import java.awt.Desktop;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

import br.com.iss.transporteCia.model.Cidade;
import br.com.iss.transporteCia.model.CrudUtil;
import br.com.iss.transporteCia.model.Rota;
import br.com.iss.transporteCia.util.Geral;

public class CadastroRota extends Cadastro {

	private JLabel tituloIdRegistro = new JLabel("ID");
    private JLabel idRegistro = new JLabel();
    private JLabel tituloCidadeOrigem = new JLabel("*Cidade origem");
    private JComboBox cidadeOrigem = new JComboBox(new String[]{""});
    private JLabel tituloCidadeDestino = new JLabel("*Cidade destino");
    private JComboBox cidadeDestino = new JComboBox(new String[]{""});
    private JLabel tituloKm = new JLabel("*KM");
    private JTextField km = new JTextField();
    private JButton btnGoogleMaps = new JButton("Google Maps...");
    private JLabel nulo1 = new JLabel("");
    private JLabel nulo2 = new JLabel("");

	public CadastroRota(Long idRegistroParaEdicao) {
		super("Cadastro de Rota");
		addRegistrosComboBox();
		getRegistroEdicao(idRegistroParaEdicao);
		handlerBotaoGoogleMaps();
		adicionaComponentesNaTela();
		addPanelConteudo(panelConteudo);
	}
	
	private void addRegistrosComboBox() {
		List<Cidade> cidades = (List<Cidade>) (Object) CrudUtil.listar("Cidade");
        for (Cidade cidade : cidades) {
        	this.cidadeOrigem.addItem(cidade);
        	this.cidadeDestino.addItem(cidade);
        }
	}

	public void getRegistroEdicao(Long idRegistroParaEdicao) {
		if (idRegistroParaEdicao != 0L) {
			@SuppressWarnings("unchecked")
			Rota objEdicao = ((List<Rota>) (Object) CrudUtil.buscar("br.com.iss.transporteCia.model.Rota", "id", idRegistroParaEdicao)).get(0);

			idRegistro.setText(Long.toString(objEdicao.getId()));
            cidadeOrigem.getModel().setSelectedItem(objEdicao.getCidadeOrigem());
            cidadeDestino.getModel().setSelectedItem(objEdicao.getCidadeDestino());
            km.setText(Double.toString(objEdicao.getKm()));
		}
	}

	public void adicionaComponentesNaTela() {
		tituloIdRegistro.setHorizontalAlignment(SwingConstants.CENTER);
		idRegistro.setHorizontalAlignment(SwingConstants.CENTER);
		panelConteudo.setLayout(new GridLayout(4, 3, 5, 5)); // linhas-colunas
        //linha 1
        panelConteudo.add(tituloIdRegistro);
        panelConteudo.add(tituloCidadeOrigem);
        panelConteudo.add(tituloCidadeDestino);
        //linha 2
        panelConteudo.add(idRegistro);
        panelConteudo.add(cidadeOrigem);
        panelConteudo.add(cidadeDestino);
        //linha 3
        panelConteudo.add(tituloKm);
        panelConteudo.add(nulo1);
        panelConteudo.add(nulo2);
        //linha 4
        panelConteudo.add(km);
        panelConteudo.add(btnGoogleMaps);
	}

	public JLabel getIdRegistro() {
		return idRegistro;
	}

	public Cidade getCidadeOrigem() {
		if (cidadeOrigem.getSelectedItem() == null || cidadeOrigem.getSelectedItem().equals("")) {
			return null;
		} else {
			return (Cidade)cidadeOrigem.getSelectedItem();			
		}
	}

	public Cidade getCidadeDestino() {
		if (cidadeDestino.getSelectedItem() == null || cidadeDestino.getSelectedItem().equals("")) {
			return null;
		} else {
			return (Cidade)cidadeDestino.getSelectedItem();			
		}
	}

	public JTextField getKm() {
		return km;
	}
	
	public void handlerBotaoGoogleMaps() {
		btnGoogleMaps.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String cidadeOrigem = (Geral.removeAcentos(getCidadeOrigem().getNome())).replace(" ", "+");
				String cidadeDestino = (Geral.removeAcentos(getCidadeDestino().getNome())).replace(" ", "+");
				
				String url = "https://maps.google.com.br/maps?saddr=" + cidadeOrigem + "&daddr=" + cidadeDestino;
				openWebpage(url);
			}
		});		
	}
	
	public static void openWebpage(String urlString) {
	    try {
	        Desktop.getDesktop().browse(new URL(urlString).toURI());
	    } catch (Exception e) {
	        e.printStackTrace();
	    }
	}
}